// plugins/svg-icon-names.ts
import type { Plugin } from 'vite';
import fs from 'fs';
import path from 'path';

const VIRTUAL_MODULE_ID = 'virtual:svg-icons';
const RESOLVED_VIRTUAL_MODULE_ID = '\0' + VIRTUAL_MODULE_ID;

/**
 * @function svgIconNamesPlugin
 * @description 创建一个 Vite 插件，用于生成 SVG 图标名称列表, 获取svg图标名称
 * @param svgDir
 */
export function svgIconNamesPlugin(svgDir: string): Plugin {
    return {
        name: 'svg-icon-names',
        resolveId(id) {
            if (id === VIRTUAL_MODULE_ID) {
                return RESOLVED_VIRTUAL_MODULE_ID;
            }
        },
        load(id) {
            if (id === RESOLVED_VIRTUAL_MODULE_ID) {
                const absDir = path.resolve(process.cwd(), svgDir);
                let iconNames: string[] = [];
                try {
                    if (fs.existsSync(absDir)) {
                       const name = fs.readdirSync(absDir)
                            .filter(file => file.endsWith('.svg'))
                            .map(file => file.replace(/\.svg$/, ''));
                       // 根据name, 截取-号后面的所有字符串
                        iconNames = name.map(item => item.split('-').slice(1).join('-'));
                    }
                } catch (e) {
                    console.warn('[svg-icon-names] Failed to read SVG directory:', e);
                }

                return `export default ${JSON.stringify(iconNames)};`;
            }
        },
    };
}